<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 为什么所有的实例对象都可以访问构造函数的prototype属性中的值?
        //   因为:所有的实例对象上的__proto__指向他的构造函数原型(prototype属性)
        //        那么实例对象没有的属性和方法,自动就会去__proto__上面找

        //  总结:属性放到构造函数中,方法放到原型里
        function Star(name, age){
            // name,age 不要定义到构造函数原型上,因为不一样的明星名字年龄不一样
             this.name = name; 
             this.age = age;
        }

        // 方法放到构造函数原型上
        Star.prototype.sing = function(){console.log('唱歌')}
        Star.prototype.dance = function(){console.log('跳舞')}


        // 创建实例
        const s1 = new Star('刘德华',58);
        const s2 = new Star('张学友',58);
          
        // 所有实例对象上的_proto_指向他的构造函数原型(prototype属性)
        //      那么实例对象没有的属性和方法,自动就会去__proto__上面找;
        console.log(s1.__proto__);
        console.log(s2.__proto__);
        console.log(s1.__proto__  == Star.prototype);
        console.log(s2.__proto__  == Star.prototype);

    </script>
</body>
</html>